package com.okbihuo.perm.component.file.domain;


import com.okbihuo.perm.component.file.domain.type.FileType;
import com.okbihuo.perm.core.mp.base.MyLogicModel;
import lombok.*;

import java.time.LocalDateTime;

/**
 * 文件记录表
 * @author November
 */
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class ComFile extends MyLogicModel {
    public static ComFile create(String name, String dir, String storeType, String md5, Integer size) {
        ComFile file = new ComFile();
        file.name = name;
        file.originalName = name;
        file.rename();
        file.dir = dir;
        file.storeType = storeType;
        file.md5 = md5;
        file.size = size;
        // 设置后缀
        file.setSuffixFromName();
        // 根据名字判断类型
        file.type = FileType.checkType(file.suffix).name();
        return file;
    }

    /**
     * 重命名
     */
    private void rename() {
        if(originalName==null) {
            return;
        }
        int begin = originalName.lastIndexOf(".");
        String suffix = "";
        String filename = originalName;
        if(begin>=0) {
            int last = originalName.length();
            suffix = originalName.substring(begin, last);
            filename = originalName.substring(0, begin);
        }
        // 加上时间戳
        filename+="-" + System.currentTimeMillis();
        // 加上后缀
        filename += suffix;
        this.name = filename;
    }
    /**
     * 从名字里获取后缀
     */
    private void setSuffixFromName() {
        if(name==null) {
            return;
        }
        int begin = name.lastIndexOf(".");
        if(begin>=0) {
            int last = name.length();
            this.suffix = name.substring(begin+1, last);
        }
    }

    /**
     * 文件名
     */
    private String name;

    /**
     * 原始上传的名字
     */
    private String originalName;
    /**
     * 文件分类文件夹
     */
    private String dir;
    /**
     * 文件类型
     * @link {FileType}
     */
    private String type;
    /**
     * 存储类型
     * @link {FileStoreType}
     */
    private String storeType;
    /**
     * 后缀
     */
    private String suffix;
    /**
     * 重复判断用的md5
     */
    private String md5;
    /**
     * 文件大小
     */
    private Integer size;
    /**
     * 若存在数据库里, 记录文件内容id
     * 若存在阿里云，记录文件夹相对路径
     * 若存在本地，记录相对路径
     */
    private String location;
    /**
     * 文件超期时间
     */
    private LocalDateTime expiresAt;
}
